<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button id="btn">发请求</button>
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/1.3.6/axios.js"></script>
    <script>
      // 响应拦截器
      //  函数1： 正常响应会调用的函数，参数response就是响应拿到的结果
      //  函数2： 响应出错会调用的函数, 参数error里有config属性，这个属性有请求时的相关信息
      //          还有response属性，这个属性有响应的错误信息
      //          在这里return promise.reject其实就在抛出一个错误，所以才进到.catch里
      //          但凡你没有抛出错误，那都是`.then`里，而且这里return什么,.then里的参数就是什么
      //          作用：可以在这里对错误进行处理，比如做一些补救
      axios.interceptors.response.use(
        function (response) {
          console.log('拦截下来了', response)
          // 正是因为这里return了response（响应拿到的结果）
          // 所以.then里的参数才能拿到结果
          // return response
          // 做数据剥离
          return response.data
        },
        function (error) {
        //   console.log('响应出错调用')
        //   console.dir(error)
          // 其实就是在抛出一个错误，正是因为这里抛出了错误，才会进到catch里
          //   return Promise.reject(error)
        //   return 'hello'

          // 在这里可以做补救
          // 我把正确的请求再发一次把结果return出去，那对下面的发请求而言还是能正常拿到结果
          error.config.url =  'http://ajax-api.itheima.net/api/province'

          return axios(error.config)
        }
      )

      document.querySelector('#btn').addEventListener('click', function () {
        axios({
          url: 'http://ajax-api.itheima.net/api/province4444',
          xx: 'oo'
        })
          .then(res => {
            console.log('then里', res)
          })
          .catch(err => {
            console.log('catch里', err)
          })
      })
    </script>
  </body>
</html>
